package cn.jesin.ssmss01.entity;

import cn.hutool.core.util.StrUtil;
import cn.jesin.ssmss01.common.OthType;
import lombok.Builder;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 谷汉斌
 * @description 用户实体类
 * @createTime 2024/8/12 下午3:05
 */
@Data
@Builder
public class User {
    /**
     * 用户id
     */
    private Integer id;
    /**
     * 账号
     */
    private String username;
    /**
     * 昵称
     */
    private String nickName;
    /**
     * 真实姓名
     */
    private String realName;
    /**
     * 手机号
     */
    private String phone;
    /**
     * 地址
     */
    private String address;
    /**
     * 年龄
     */
    private String age;
    /**
     * 性别
     */
    private String sex;
    /**
     * 头像
     */
    private String avatar;
    /**
     * 角色
     */
    private String role;
    /**
     * 身份证号
     */
    private String identityNum;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 第三方授权记录
     */
    private String oauth;
    /**
     * 密码
     */
    private String password;
    /**
     * 创建时间
     */
    private String createTime;
    /**
     * 更新时间
     */
    private String updateTime;
    /**
     * 认证信息
     */
    private String credential;

    /**
     * 解析第三方授权信息
     */
    public Map<String, Integer> parseOauth() {
        String[] oauths = this.oauth.split(",");
        Map<String, Integer> map = new HashMap<>();
        for (String oauth : oauths) {
            String id = oauth.split(":")[0];
            String type = oauth.split(":")[1];
            map.put(type, Integer.parseInt(id));
        }
        return map;
    }

    /**
     * 获取第三方授权信息
     */
    public String getOauthInfo(String type) {
        if (type.equals(OthType.PHONE.getType())) {
            return this.phone;
        } else if (type.equals(OthType.EMAIL.getType())) {
            return this.email;
        }
        return null;
    }

    /**
     * 更新第三方授权信息
     */
    public void updateOauthInfo(String type, String value, Integer id) {
        Map<String, Integer> map = this.parseOauth();
        if (type.equals(OthType.PHONE.getType())) {
            this.phone = value;
        } else if (type.equals(OthType.EMAIL.getType())) {
            this.email = value;
        }
        //如果没绑定则添加，绑定了就修改
        if (map.get(type) == null) {
            map.put(type, id);
        } else {
            map.replace(type, id);
        }
        StringBuilder stringBuffer = new StringBuilder();
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            stringBuffer.append(entry.getValue()).append(":").append(entry.getKey()).append(",");
        }
        //移除该字符串末尾的逗号
        this.oauth = StrUtil.removeSuffix(stringBuffer.toString(), ",");
    }
}
